import Vue from 'vue'
import Router from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

Vue.use(Router)

//解决重复点击路由控制台报错问题
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
//基于文件目录自动读取配置路由
let moduleRoutes = []
const routerFileContext = require.context('./modules', true, /\.js$/)
routerFileContext.keys().forEach(fileName => {
  const fileContent = routerFileContext(fileName);
  moduleRoutes = moduleRoutes.concat(Object.values(fileContent))
})

//webpack中import不能使用变量,require必须使用字符模板（``包裹）才可动态替换变量(${}包裹)
const _import = eval(process.env.NODE_ENV == "production" ? file => require(`@/views/${file}`).default : file => require('@/views/' + file).default)

export const root_routes = [
  {
    name: 'Index',
    path: '/',
    redirect: '/home',
    component: _import('layout/layout'),
    meta: {
      auth: {//不配置时不受权限控制(必须配合security插件使用)
        code: 'home',
        model: 'page',
      },
      keep: { //(必须配合keepView组件使用)
        alive: true, //是否需要缓存
        state: true, //activated时是否保留状态刷新
      },
      menu: { //(必须配合IterateMenu组件使用)
        title: '首页',
        icon: 'el-icon-more', //菜单中图标
        hidden: false //菜单中是否显示
      },
      container: true,
      btnAuth: [{name: '新增按钮', auth: 'portal-add'}]
    },
    children: [
      {
        name: 'Home',
        path: 'home',
        component: _import('home'),
        meta: {
          auth: {//不配置时不受权限控制(必须配合security插件使用)
            code: 'home',
            model: 'page',
          },
          keep: { //(必须配合keepView组件使用)
            alive: true, //是否需要缓存
            state: true, //activated时是否保留状态刷新
          },
          menu: { //(必须配合IterateMenu组件使用)
            title: '主页',
            icon: 'el-icon-more', //菜单中图标
            hidden: false //菜单中是否显示
          },
        }
      },
    ]
  },
  ...moduleRoutes,
  {
    name: 'About',
    path: '/about',
    component: () => import('@/views/about'),
    meta: {
      /*auth: {//不配置时不受权限控制(必须配合security插件使用)
        code:'about',
        model:'page',
      },*/
      hidden: false,
      keep: { //(必须配合keepView组件使用)
        alive: true, //是否需要缓存
        state: true, //activated时是否保留状态刷新
      },
      menu: { //(必须配合IterateMenu组件使用)
        title: '关于',
        icon: 'el-icon-more', //菜单中图标
        hidden: false //菜单中是否显示
      },
    }
  },
  {
    name: 'Login',
    path: '/login',
    component: () => import('@/views/logon/login.vue'), //ES6规范，编译引用
    meta: {
      /*auth: {//不配置时不受权限控制(必须配合security插件使用)
        code:'login',
        model:'page',
      },*/
      keep: { //(必须配合keepView组件使用)
        alive: true, //是否需要缓存
        state: true, //activated时是否保留状态刷新
      },
      menu: { //(必须配合IterateMenu组件使用)
        title: '登录',
        icon: 'el-icon-more', //菜单中图标
        hidden: false //菜单中是否显示
      },
    }
  },
  {
    name: 'Portal',
    path: '/portal',
    component: () => import('@/views/portal'),
    meta: {
      /*auth: {//不配置时不受权限控制(必须配合security插件使用)
        code:'portal',
        model:'page',
      },*/
      keep: { //(必须配合keepView组件使用)
        alive: true, //是否需要缓存
        state: true, //activated时是否保留状态刷新
      },
      menu: { //(必须配合IterateMenu组件使用)
        title: '门户',
        icon: 'el-icon-more', //菜单中图标
        hidden: false //菜单中是否显示
      },
    }
  },
]
const _router = new Router({
  mode: 'hash',
  base: process.env.BASE_URL,
  routes: root_routes
})

_router.beforeEach((to, from, next) => {
  NProgress.start()
  next()
  NProgress.done()
})
_router.afterEach(() => {
  NProgress.done()
})


export default _router
